Linux源码包安装

        在linux下面安装一个源码包是最常用的,在日常的管理工作中,大部分软件都是通过源码安装的。安装一个源码包,是需要自己把源代码编译成二进制的可执行文件。如果读得懂这些源代码,那么就可以去修改这些源代码自定义功能,然后再去编译成想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。

        源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果你的机器上没有安装gcc就没有办法去编译源码。你可以使用 yum install -y gcc 来完成安装。

安装一个源码包,通常需要三个步骤:

./configure

        在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过 ./configure –help 命令来查看。在这一步会自动检测你的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后才会生成一个Makefile文件。

make

        使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。

make install

        安装步骤,生成相关的软件存放目录和配置文件的过程。

Apache源码安装实例

        上面的3步并不是所有的源码包软件都一样的,也就是说源码包的安装并非具有一定的标准安装步骤。这就需要拿到源码包解压后,然后进入到目录找相关的帮助文档,通常会以INSTALL或者README为文件名。所以一定要去看一下。

1.下载一个源码包

下载源码包一定要去官方站点去下载,不要在网上随便下载,那样很不安全。因为下载到的源码包很有可能是被人修改过的。

1
2
[root@localhost src]# cd /usr/local/src/
[root@localhost src]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.27.tar.bz2

        下载地址为apache官方网站上提供的一个镜像,下载速度还可以。在下载之前,进入到了 “/usr/local/src” 目录,这是因为习惯把源码包都放到这个目录下,这样做的好处是,方便自己和其他管理员维护,所以以后下载的源码包都统一放到这个目录下吧。

2.解压源码包

1
[root@localhost src]# tar jxvf httpd-2.2.27.tar.bz2

3.配置相关的选项,并生成Makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost src]# cd httpd-2.2.27
[root@localhost httpd-2.2.27]# ./configure --help |less
`configure' configures this package to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE. See below for descriptions of some of the useful variables.
Defaults for the options are specified in brackets.
Configuration:
-h, --help display this help and exit
--help=short display options specific to this package
--help=recursive display the short help of all the included packages
-V, --version display version information and exit
-q, --quiet, --silent do not print `checking ...' messages
--cache-file=FILE cache test results in FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or `..']

        使用 ./configure –help 命令查看可以使用的选项。一般常用的有 –prefix=PREFIX 这个选项的意思是定义软件包安装到哪里。一个小小的建议,通常源码包都是安装在/usr/local/目录下的。比如,把apache安装在/usr/local/apache2下,那么这里就应该这样写 –prefix=/usr/local/apache2 其他还有好多选项,如果有耐心可以挨个去看一看都有什么作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
Configuring Apache Portable Runtime library ...
checking for APR... reconfig
configuring package in srclib/apr now
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
Configuring APR library
Platform: i686-pc-linux-gnu
checking for working mkdir -p... yes
APR Version: 1.4.6
checking for chosen layout... apr
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/usr/local/src/httpd-2.2.27/srclib/apr':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
configure failed for srclib/apr

        不幸的是,一开始就报错了,因为没有gcc编译器,需要先安装一下。

1
[root@localhost httpd-2.2.27]# yum install -y gcc

        由于gcc依赖的包很多,所以安装时间会长一些。安装完后,再继续上面的步骤。

1
[root@localhost httpd-2.2.27]# ./configure --prefix=/usr/local/apache2

        验证这一步是否成功的命令是:

1
2
[root@localhost httpd-2.2.27]# echo $?
0

        返回值如果是 “0” 则执行成功,否则就是没有成功。此时就成功生成 Makefile 了。

1
2
[root@localhost httpd-2.2.27]# ls -l Makefile
-rw-r--r-- 1 root root 8954 5月 13 12:02 Makefile

4.进行编译

1
2
[root@localhost httpd-2.2.27]# make
-bash: make: command not found

        又发生错误了,提示 “make” 命令没有发现,解决办法是安装make工具。

1
[root@localhost httpd-2.2.27]# yum install -y make

        继续make

1
2
3
4
5
6
7
[root@localhost httpd-2.2.27]# make
Making all in srclib
make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib'
Making all in apr
make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'
make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'
/bin/sh /usr/local/src/httpd-2.2.27/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -I./include -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I./include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include/arch/unix -I/usr/local/src/httpd-2.2.27/srclib/apr/include -o passwd/apr_getpass.lo -c passwd/apr_getpass.c && touch passwd/apr_getpass.lo

        编译的时候,就会出现类似这么多乱七八糟的信息,编译的时间比较长,CPU使用率会很高,这是因为CPU高速计算,编译完后,再使用 echo $? 验证一下是否正常成功。

1
2
[root@localhost httpd-2.2.27]# echo $?
0

        如果是0的话,就可以执行最后一步了。

5.安装

1
2
3
4
5
6
7
8
[root@localhost httpd-2.2.27]# make install
Making install in srclib
make[1]: Entering directory `/usr/local/src/httpd-2.2.27/srclib'
Making install in apr
make[2]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'
make[3]: Entering directory `/usr/local/src/httpd-2.2.27/srclib/apr'
make[3]: Nothing to be done for `local-all'.
make[3]: Leaving directory `/usr/local/src/httpd-2.2.27/srclib/apr'

        当然也可以使用 echo $? 看看有没有正确安装,执行完这一步,则会在 “/usr/local/apache2” 目录下增加了很多目录。

1
2
3
[root@localhost httpd-2.2.27]# ls /usr/local/apache2/
bin cgi-bin error icons lib man modules
build conf htdocs include logs manual

        到此,apache源码的安装就完成了